#include "List.cpp"

//给定一个链表，两两交换其中相邻的节点，并返回交换后的链表。
//
//你不能只是单纯的改变节点内部的值，而是需要实际的进行节点交换。
// pos p q np
//     1 2 3 4 5 6
//     pos
//         p q np
//     2 1 3 4 5 6
ListNode* swapPairs(ListNode* head){
    ListNode* p = head;
    ListNode* newHead = (ListNode*) malloc(sizeof(ListNode));
    newHead->next = NULL;
    ListNode* pos = newHead;
    while (p != NULL) {
        ListNode *q = p->next;
        // 特殊情况

        ListNode *nextP = q->next;

        pos->next = q;
        pos = pos->next;

        pos->next = p;
        pos = pos->next;

        p = nextP;
    }
    pos->next = NULL;

    return newHead->next;
}

int main() {
    int number[] = {1,2,3,4,5,6,7};
    List list = CreateListByArray(number, ARRAY_SIZE(number));
    List newList = swapPairs(list);
    PrintList(newList);
}